package entities;

import java.io.Serializable;
import java.lang.String;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

import org.apache.commons.codec.digest.DigestUtils;

import ejb.UtenteDTO;

/**
 * Entity implementation class for Entity: UtenteRegistrato
 *
 */
@Entity
@Table(name="UtenteRegistrato")
@NamedQueries({
	@NamedQuery(name= "UtenteRegistrato.FIND_ALL", query="SELECT u FROM UtenteRegistrato u WHERE u.gruppi=:gruppi ORDER BY u.idUtente ASC"),
	@NamedQuery(name= "UtenteRegistrato.MODIFICA", query="UPDATE UtenteRegistrato u SET u.nome=:nome, u.cognome=:cognome,"
		+ " u.email=:email, u.dataNascita=:dataNascita, u.telefono=:telefono WHERE u.idUtente=:id"),
	@NamedQuery(name= "UtenteRegistrato.FIND_PRENOTAZIONI_ONE", query= "SELECT u.prenotazioni FROM UtenteRegistrato u WHERE u.idUtente=:id")
})
public class UtenteRegistrato implements Serializable {
	
	public static final String FIND_UTENTE = "User.findUtente";
	   
	@Id
	private String idUtente;
	private String password;
	private String nome;
	private String cognome;
	private String email;
	private String dataNascita;
	private String telefono;
	private static final long serialVersionUID = 1L;
	
	@ManyToMany(cascade = CascadeType.PERSIST)
	@JoinTable(
			name="GruppoUtente",
			joinColumns={
					@JoinColumn(name="IDUTENTE", referencedColumnName="IDUTENTE")
			},
			inverseJoinColumns={
					@JoinColumn(name="IDGRUPPO", referencedColumnName="IDGRUPPO")
				}
	)
	private List<Gruppo> gruppi;
	
	@ManyToMany(cascade = CascadeType.PERSIST)
	@JoinTable(
			name="Prenotazioni",
			joinColumns={
					@JoinColumn(name="IDUTENTE", referencedColumnName="IDUTENTE")
			},
			inverseJoinColumns={
					@JoinColumn(name="IDPACCHETTOVIAGGIO", referencedColumnName="IDPACCHETTOVIAGGIO")
				}
	)
	private List<PacchettoViaggio> prenotazioni;

	public UtenteRegistrato(UtenteDTO user){
        this.idUtente = user.getIdUtente();
        this.password = DigestUtils.sha256Hex(user.getPassword());
        this.nome = user.getNome();
        this.cognome = user.getCognome();       
        this.email = user.getEmail();
        this.dataNascita = user.getDataNascita();
        this.telefono = user.getTelefono();
        this.prenotazioni = new ArrayList<>();
    }

	public UtenteRegistrato() {
		super();
	}   
	public String getIdUtente() {
		return this.idUtente;
	}

	public void setIdUtente(String idUtente) {
		this.idUtente = idUtente;
	}   
	
	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}   
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}   
	public String getCognome() {
		return this.cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}   
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}   
	public String getDataNascita() {
		return this.dataNascita;
	}

	public void setDataNascita(String dataNascita) {
		this.dataNascita = dataNascita;
	}   
	
	public List<Gruppo> getGruppi() {
		return this.gruppi;
	}

	public void setGruppi(List<Gruppo> group) {
		this.gruppi = group;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public List<PacchettoViaggio> getPrenotazioni() {
		return prenotazioni;
	}

	public void setPrenotazioni(List<PacchettoViaggio> prenotazioni) {
		this.prenotazioni = prenotazioni;
	}
   
}
